#ifndef __SUBJECT_H__
#define __SUBJECT_H__

//! De basisklasse voor 'observable' klassen
/*!
	Engelse naamgeving wordt gebruikt om consistent te zijn met voorbeelden uit boeken en sites over het
	subject-observer patroon.

	/author Kenneth Venken, Maarten Lambert
*/
#include <set>
using std::set;

#include "Observer.h"

class Subject
{
protected:
	void attach(Observer* observer)
	{
		m_observers.insert( observer );	
	}

	void detach(Observer* observer)
	{
		m_observers.erase( observer );
	}
	void notify()
	{
		for( set< Observer* >::iterator it = m_observers.begin(); it != m_observers.end(); it++ )
			(*it)->update(this);
	}

protected:
	set< Observer* > m_observers;
};

#endif
